// 导入鸿蒙系统的Preferences模块，用于本地轻量级数据存储
import preferences from '@ohos.data.preferences'

/**
 * Preferences工具类，封装常用的Preferences操作
 */
class PreferencesUtil {
  // 使用Map缓存已加载的Preferences实例，键为Preferences名称，值为Preferences对象
  public prefMap: Map<string, preferences.Preferences> = new Map()

  /**
   * 加载指定名称的Preferences
   * @param context 上下文对象（通常为AbilityContext）
   * @param name Preferences名称
   */
  async loadPreference(context, name: string) {
    try {
      // 异步获取Preferences实例
      let pref = await preferences.getPreferences(context, name)
      // 将实例存入缓存Map
      this.prefMap.set(name, pref)
      console.log('testTag', `加载Preferences[${name}]成功`)
    } catch (exception) {
      console.log('testTag', `加载Preferences[${name}]失败`, JSON.stringify(exception))
    }
  }

  /**
   * 存储键值对到指定Preferences
   * @param name Preferences名称
   * @param key 存储键名
   * @param value 存储值（支持ValueType类型）
   */
  async putPreferenceValue(name: string, key: string, value: preferences.ValueType) {
    // 检查是否已初始化
    if (!this.prefMap.has(name)) {
      console.log('testTaf', `Preferences[${name}]尚未初始化`)
      return
    }
    try {
      // 从缓存获取Preferences实例
      const pref = this.prefMap.get(name)
      // 异步存储数据
      await pref.put(key, value)
      // 立即刷盘
      await pref.flush()
      console.log('testTag', `保存Preferences[${name}:${key}=${value}]成功`)
    } catch (e) {
      console.log('testTag', `保存Preferences[${name}:${key}=${value}]失败`, JSON.stringify(e))
    }
  }

  /**
   * 从指定Preferences读取键值
   * @param name Preferences名称
   * @param key 要读取的键名
   * @returns Promise解析为对应的值（不存在时返回null）
   */
  async getPreferenceValue(name: string, key: string) {
    // 检查是否已初始化
    if (!this.prefMap.has(name)) {
      console.log('testTaf', `Preferences[${name}]尚未初始化`)
      return
    }
    try {
      // 从缓存获取Preferences实例
      const pref = this.prefMap.get(name)
      // 异步读取数据（默认值null）
      const value = await pref.get(key, null)
      console.log('testTag', `读取Preferences[${name}:${key}=${value}]成功`)
      return value
    } catch (e) {
      console.log('testTag', `保存Preferences[${name}:${key}]失败`, JSON.stringify(e))
    }
  }

  clearValue(){
    this.prefMap.clear()
  }
}

// 创建单例实例
const preferencesUtil = new PreferencesUtil()

// 导出单例对象（保持类型为PreferencesUtil）
export default preferencesUtil as PreferencesUtil